package sys

import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	"myadmin/sys/cache/mapstore"
	"myadmin/sys/cache/redis"
	"myadmin/sys/error"
	"myadmin/sys/filter"
	"myadmin/sys/session"
	"myadmin/sys/sysmodels"
)

/************************************
基于 beego 与 easyweb 的admin快速开发
1 系统模块包括
	1 用户管理
	2 权限管理
	3 角色管理
2 菜单管理
*************************************/



func init(){
	//基本参数初始化到全局变量中
	//缓存
	hasReids,err:=beego.AppConfig.Bool("redis::IsRun")
	if err!=nil{
		hasReids=false
	}
	if hasReids{
		redis.Start()
	}
	mapstore.Set("hasRedis",hasReids)


	//设置session
	exp,err:=beego.AppConfig.Int("session::exp")
	if err!=nil{
		exp = 2
	}
	exp = exp*24*60*60
	mapstore.Set("sessionexp",exp)
	//
	//sessionManager:=beego.AppConfig.String("session::manager")
	//mapstore.Set("sessionManager",sessionManager)

	//mullog,err := beego.AppConfig.Bool("session::multiplelog")
	//if err!=nil{
	//	mullog = false
	//}
	//if !mullog && sessionManager == "redis"{
	//	//
	//}

	//设置数据
	orm.RegisterModel(new(sysmodels.SysAuth),
		new(sysmodels.SysRole),
		new(sysmodels.SysUser),
		new(session.SysSession))
	//设置error
	SetError()

	//静态文件处理
	SetStaticSrc()

	//是否清除缓存
	nocache,_:=beego.AppConfig.Bool("web::NoCache")
	if nocache{
		ClearCache()
		logs.Info("web::NoCache 清除缓存")
	}

	//是否跨域
	cros,_:= beego.AppConfig.Bool("web::cros")
	if cros{
		SetCros()
		logs.Info("web:cros 跨域设置")
	}


	//设置 session
	InitSession()
	//设置apidoc
	ApiDoc()
	//设置限速
	InitSpeed()




}


func SetStaticSrc(){
	//静态资源处理
	rstatic := beego.AppConfig.String("router::static")
	rcomponents := beego.AppConfig.String("router::components")
	rjson:=beego.AppConfig.String("router::json")
	beego.SetStaticPath("/static", rstatic)
	beego.SetStaticPath("/components",rcomponents)
	beego.SetStaticPath("/json",rjson)
	logs.Info("router::components:%s",rcomponents)
	logs.Info("router::json:%s",rjson)
	logs.Info("router::static:%s",rstatic)
}
func ClearCache(){
	//设置不缓存
	beego.InsertFilter("/static/*", beego.BeforeStatic, filter.FilterNoCache)
	beego.InsertFilter("/components/*", beego.BeforeStatic, filter.FilterNoCache)
}

func SetCros(){
	//设置跨域
	beego.InsertFilter("*", beego.BeforeRouter, filter.FilterCors)
}

func ApiDoc(){
	if beego.BConfig.RunMode == "dev" {
		beego.BConfig.WebConfig.DirectoryIndex = true
		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
	}
}

func SetError(){
	beego.ErrorController(&error.ErrorController{})
}

func InitSession(){
	//初始化session //目前只使用mysql做session 后期开发redis
	sesManager:=beego.AppConfig.String("session::manager")
	if sesManager == "mysql"{
		session.Ses = session.NewSysSession()
		//定时清除session
		go session.SetTimeClearn()
	}else if sesManager == "redis"{
		session.Ses = session.NewRedisSession()
	}
}

func InitSpeed(){
	//设置限速
	speed_,_ := beego.AppConfig.Int("Speed")
	if speed_!=0{
		mapstore.Set("speed",int64(speed_))
	}
}